High-order Functions এর উদাহরণ

Higher-Order Functions - জাভা ফাংশনাল প্রোগ্রামিং (Java Functional Programming) - Java Technologies

321

Higher-order functions হল এমন ফাংশন যা:

  1. ফাংশনকে আর্গুমেন্ট হিসেবে গ্রহণ করে, অথবা
  2. ফাংশনকে রিটার্ন করে

এটি ফাংশনাল প্রোগ্রামিংয়ের একটি গুরুত্বপূর্ণ বৈশিষ্ট্য, যেটি Java 8 থেকে Lambda Expressions এবং Function Interface এর মাধ্যমে সহজে ব্যবহার করা যেতে পারে। Higher-order functions এর মাধ্যমে আপনি আরও ফ্লেক্সিবল, পুনঃব্যবহারযোগ্য এবং মডুলার কোড তৈরি করতে পারেন।

এই পোস্টে, আমরা Java 8 এর মাধ্যমে Higher-order Functions এর কিছু উদাহরণ দেখব।


Higher-order Functions এর উদাহরণ:

1. Function as an Argument (ফাংশনকে আর্গুমেন্ট হিসেবে পাস করা)

ফাংশনকে অন্য ফাংশনের আর্গুমেন্ট হিসেবে পাস করা একটি Higher-order function এর অন্যতম উদাহরণ।

import java.util.function.Function;

public class HighOrderFunctionExample {

    // A higher-order function that accepts a Function as argument
    public static int applyFunction(int value, Function<Integer, Integer> func) {
        return func.apply(value);
    }

    public static void main(String[] args) {
        // Using Lambda Expression to pass a function
        int result1 = applyFunction(5, x -> x * 2);  // Multiply by 2
        System.out.println(result1);  // Output: 10

        int result2 = applyFunction(5, x -> x + 10);  // Add 10
        System.out.println(result2);  // Output: 15
    }
}

ব্যাখ্যা:

  • এখানে applyFunction একটি higher-order function যা একটি Function<Integer, Integer> আর্গুমেন্ট হিসেবে গ্রহণ করে এবং সেই ফাংশনটির মাধ্যমে ইনপুট ভ্যালুকে প্রসেস করে।
  • বিভিন্ন ল্যাম্বডা এক্সপ্রেশন দিয়ে আপনি একাধিক ফাংশন পাস করতে পারেন, যেমন x -> x * 2 এবং x -> x + 10

2. Function as a Return Value (ফাংশনকে রিটার্ন হিসেবে দেওয়া)

Higher-order functions ফাংশনকে রিটার্ন হিসেবে দিতে পারে, অর্থাৎ একটি ফাংশন আরেকটি ফাংশন রিটার্ন করতে পারে।

import java.util.function.Function;

public class HighOrderFunctionExample {

    // A higher-order function that returns a function
    public static Function<Integer, Integer> multiplyBy(int multiplier) {
        return (x) -> x * multiplier;
    }

    public static void main(String[] args) {
        // Get a function that multiplies by 3
        Function<Integer, Integer> multiplyBy3 = multiplyBy(3);
        System.out.println(multiplyBy3.apply(4));  // Output: 12

        // Get a function that multiplies by 5
        Function<Integer, Integer> multiplyBy5 = multiplyBy(5);
        System.out.println(multiplyBy5.apply(4));  // Output: 20
    }
}

ব্যাখ্যা:

  • multiplyBy হল একটি higher-order function যা একটি ফাংশন রিটার্ন করে। multiplyBy(3) ফাংশনটি একটি নতুন ফাংশন রিটার্ন করে যা একটি সংখ্যা ৩ দিয়ে গুণ করবে।
  • multiplyBy3.apply(4) এর মাধ্যমে আমরা ৪ সংখ্যাকে ৩ দিয়ে গুণ করে ১২ পাই।

3. Composing Higher-order Functions

Higher-order functions এর সাহায্যে আপনি একাধিক ফাংশনকে চেইন করে একত্রে কার্যকরী কোড তৈরি করতে পারেন। এতে এক ফাংশনের আউটপুট আরেকটি ফাংশনের ইনপুট হিসেবে ব্যবহৃত হয়। compose() এবং andThen() মেথডের মাধ্যমে আপনি ফাংশনগুলি একত্রিত করতে পারেন।

import java.util.function.Function;

public class HighOrderFunctionExample {

    public static void main(String[] args) {
        // Define two functions
        Function<Integer, Integer> add10 = x -> x + 10;
        Function<Integer, Integer> multiplyBy2 = x -> x * 2;

        // Using andThen() to compose functions
        Function<Integer, Integer> add10ThenMultiplyBy2 = add10.andThen(multiplyBy2);
        System.out.println(add10ThenMultiplyBy2.apply(5));  // Output: 30 (5 + 10 = 15, then 15 * 2 = 30)

        // Using compose() to compose functions
        Function<Integer, Integer> multiplyBy2ThenAdd10 = add10.compose(multiplyBy2);
        System.out.println(multiplyBy2ThenAdd10.apply(5));  // Output: 20 (5 * 2 = 10, then 10 + 10 = 20)
    }
}

ব্যাখ্যা:

  • add10.andThen(multiplyBy2) এবং add10.compose(multiplyBy2) এর মাধ্যমে দুইটি ফাংশনকে একত্রিত করা হয়েছে।
  • andThen() ফাংশন প্রথমে add10 ফাংশনটি চালাবে এবং তারপরে multiplyBy2 ফাংশনটি প্রয়োগ করবে।
  • compose() ফাংশন প্রথমে multiplyBy2 ফাংশনটি চালাবে এবং তারপর add10 ফাংশনটি প্রয়োগ করবে।

4. Higher-order Functions with Stream API

Stream API তে Higher-order functions বেশ গুরুত্বপূর্ণ ভূমিকা পালন করে। Stream গুলি ফাংশনাল অপারেশন ব্যবহার করে ডেটাকে প্রক্রিয়া করে।

import java.util.*;
import java.util.function.Function;
import java.util.stream.*;

public class HighOrderFunctionExample {

    public static void main(String[] args) {
        List<Integer> numbers = Arrays.asList(1, 2, 3, 4, 5);

        // Define a function to double the numbers
        Function<Integer, Integer> doubleIt = x -> x * 2;

        // Using map() with higher-order function to apply 'doubleIt' on each element
        List<Integer> doubledNumbers = numbers.stream()
                                                .map(doubleIt)
                                                .collect(Collectors.toList());

        System.out.println(doubledNumbers);  // Output: [2, 4, 6, 8, 10]
    }
}

ব্যাখ্যা:

  • এখানে, map() ফাংশনটি একটি Higher-order function যা প্রতিটি উপাদানের উপর doubleIt ফাংশন প্রয়োগ করে। এইভাবে আপনি স্ট্রিমে ফাংশনাল প্রোগ্রামিং কৌশল ব্যবহার করতে পারেন।

Higher-order Functions এর সুবিধা

  1. Modular and Reusable Code:
    • ফাংশনগুলোকে ছোট এবং পুনঃব্যবহারযোগ্য টুকরো হিসেবে ভাঙা যায়, এবং যেকোনো ফাংশনকে অন্য ফাংশনের ইনপুট বা আউটপুট হিসেবে ব্যবহার করা যায়।
  2. Clean and Readable Code:
    • Higher-order functions কোডকে পরিষ্কার এবং কমপ্যাক্ট করে, এবং কোডের পুনঃব্যবহারযোগ্যতা বৃদ্ধি পায়। ফাংশনাল প্রোগ্রামিংয়ের মাধ্যমে কোড কমপ্লেক্সিটি কমানো যায়।
  3. Improved Maintainability:
    • ফাংশনাল প্রোগ্রামিংয়ের স্টাইল বজায় রেখে যখন আপনি একাধিক ফাংশনকে একত্রিত করেন বা কমপোজ করেন, তখন কোড মেইন্টেন করা সহজ হয়।
  4. Flexible and Composable:
    • Higher-order functions আপনাকে ফাংশনগুলোকে সহজেই চেইন এবং কমপোজ করতে সহায়তা করে, যা কোডে অধিক ফ্লেক্সিবিলিটি এবং মডুলারিটি আনে।

সারাংশ:

Higher-order functions হল ফাংশনাল প্রোগ্রামিংয়ের একটি গুরুত্বপূর্ণ ধারণা যেখানে ফাংশনগুলোকে আর্গুমেন্ট হিসেবে গ্রহণ করা বা রিটার্ন করা হয়। Java 8 এ, Higher-order functions ব্যবহার করে আপনি কোডকে আরও মডুলার, পুনঃব্যবহারযোগ্য এবং কার্যকরী করতে পারেন। Lambda Expressions, Method References, এবং Stream API এর মাধ্যমে ফাংশনাল প্রোগ্রামিংয়ের সুবিধাগুলি Java তে বাস্তবায়ন করা হয় এবং Higher-order functions কোডের ফ্লেক্সিবিলিটি এবং কার্যকারিতা বৃদ্ধি করে।

Content added By
Promotion

Are you sure to start over?

Loading...